home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / archives / com / internet / stik / gls002b5.zoo / drivers.h < prev    next >
C/C++ Source or Header  |  1997-02-16  |  7KB  |  171 lines

  1. /*
  2.  *      drivers.h           (c) Steve Adam   1995
  3.  *                              steve@netinfo.com.au
  4.  *                   Support by Dan Ackerman 1996
  5.  *                              ackerman.29@postbox.acs.ohio-state.edu
  6.  *
  7.  *      Data types etc. for access to STiK TCP/IP drivers.
  8.  *
  9.  *    Modified 2/16/97 for MiNTlib compatibility --dsb
  10.  */
  11.  
  12. #ifndef STIK_DRIVERS_H
  13. #define STIK_DRIVERS_H
  14.  
  15. #ifndef COMPILER_H
  16. #include <compiler.h>
  17. #endif
  18.  
  19. /*--------------------------------------------------------------------------*/
  20.  
  21. /*
  22.  * Data types used throughout STiK
  23.  */
  24. typedef          char  int8;
  25. typedef unsigned char uint8;
  26. typedef          int   int16;
  27. typedef unsigned int  uint16;
  28. typedef          long  int32;
  29. typedef unsigned long uint32;
  30.  
  31. #ifndef TRUE
  32. #define TRUE    1
  33. #endif
  34. #ifndef FALSE
  35. #define FALSE   0
  36. #endif
  37.  
  38. #define MAX_STATES    12         /* Was 16, must be > 2 and < 256           */
  39. #define MAX_HDR      128         /* XXX 4bsd-ism : should really be 128     */
  40.  
  41. /*
  42.  * The minimum IP header
  43.  */
  44. typedef struct ip_header {
  45.     unsigned ver : 4;         /*  Version                                   */
  46.     unsigned ihl : 4;         /*  Internet Header Length                    */
  47.     unsigned tos : 8;         /*  Type of Service                           */
  48.     int16  len;               /*  Total length, 16 bits                     */
  49.     uint16  id;               /*  Identification, 16 bits                   */
  50.     int16  ofst;              /*  Fragment offset, 16 bits, includes Flags  */
  51.     uint8   ttl;              /*  Time to live, 8 bits                      */
  52.     uint8   ptcl;             /*  Protocol, 8 bits                          */
  53.     uint16  sum;              /*  Header checksum, 16 bits                  */
  54.     uint32  s_ip;             /*  Source Address, 32 bits                   */
  55.     uint32  d_ip;             /*  Destination Address, 32 bits              */
  56.  /* char optlen;                  Length of options field, in bytes         */
  57.  /* char options[IP_MAXOPT];      Options field                             */
  58. } IP_HDR;
  59.  
  60.  
  61. /*--------------------------------------------------------------------------*/
  62.  
  63. /*
  64.  * STIK global configuration structure
  65.  */
  66. typedef struct config {
  67.     uint32  client_ip;          /* IP address of client (local) machine     */
  68.     uint32  provider;           /* IP address of provider, or 0L            */
  69.     uint16  ttl;                /* Default TTL for normal packets           */
  70.     uint16  ping_ttl;           /* Default TTL for 'ping'ing                */
  71.     uint16  mtu;                /* Default MTU (Maximum Transmission Unit)  */
  72.     uint16  mss;                /* Default MSS (Maximum Segment Size)       */
  73.     uint16  df_bufsize;         /* Size of defragmentation buffer to use    */
  74.     uint16  rcv_window;         /* TCP receive window                       */
  75.     uint16  def_rtt;            /* Initial RTT time in ms                   */
  76.     int16   time_wait_time;     /* How long to wait in 'TIME_WAIT' state    */
  77.     int16   unreach_resp;       /* Response to unreachable local ports      */
  78.     int32   cn_time;            /* Time connection was made                 */
  79.     int16   cd_valid;           /* Is Modem CD a valid signal ??            */
  80.     int16   line_protocol;      /* What type of connection is this          */
  81.     void    (*old_vec)(void);   /* Old vector address                       */
  82.     struct  slip *slp;          /* Slip structure for happiness             */
  83.     char    *cv[101];           /* Space for extra config variables         */
  84.     int16   reports;            /* Problem reports printed to screen ??     */
  85.     int16   max_num_ports;      /* Maximum number of ports supported        */
  86.     uint32  received_data;      /* Counter for data being received          */
  87.     uint32  sent_data;          /* Counter for data being sent              */
  88. } CONFIG;
  89.  
  90.  
  91. /*--------------------------------------------------------------------------*/
  92.  
  93. /*
  94.  * Driver access structure / functions
  95.  */
  96. #define MAGIC   "STiKmagic"
  97. #define CJTAG   "STiK"
  98.  
  99. typedef struct drv_header {                 /* Header part of TPL structure */
  100.     char *module;
  101.     char *author;
  102.     char *version;
  103. } DRV_HDR;
  104.  
  105. typedef struct drv_list {
  106.     char      magic[10];                      /* Magic string, def'd as MAGIC */
  107.     DRV_HDR * __CDECL (*get_dftab) (char *);  /* Get Driver Function Table    */
  108.     int16     __CDECL (*ETM_exec) (char *);   /* Execute a STiK module        */
  109.     CONFIG    *cfg;
  110. } DRV_LIST;
  111.  
  112. extern DRV_LIST *drivers;
  113.  
  114. #define get_dftab(x)    (*drivers->get_dftab)(x)
  115. #define ETM_exec(x)     (*drivers->ETM_exec)(x)
  116. #define stik_cfg        (drivers->cfg)
  117.  
  118.  
  119. /*--------------------------------------------------------------------------*/
  120.  
  121. /*
  122.  * "state" data for each active tcp conversation on the wire.
  123.  */
  124. struct cstate {
  125.      struct cstate   *cs_next;       /* Next mru cstate (transmit only)     */
  126.      unsigned short  cs_hlen;        /* Size of header (receive only)       */
  127.      unsigned char   cs_id;          /* Con. no. associated with this state */
  128.      unsigned char   cs_filler;
  129.      union {
  130.           char             csu_hdr[MAX_HDR];
  131.           struct ip_header csu_ip;   /* Header from most recent packet      */
  132.      } slcs_u;
  133. };
  134.  
  135. #define cs_ip   slcs_u.csu_ip
  136. #define cs_hdr  slcs_u.csu_hdr
  137.  
  138. /*
  139.  * Serial line state - we need one per line 
  140.  */
  141. typedef struct slcompress {
  142.      struct cstate  *last_cs;                /* Most recently used tstate   */
  143.      uint8          last_recv;               /* Last received connection id */
  144.      uint8          last_xmit;               /* Last sent connection id     */
  145.      uint8          flags;
  146.      struct cstate  *tstate[MAX_STATES];     /* Transmit connection states  */
  147.      struct cstate  *rstate[MAX_STATES];     /* Receive connection states   */
  148. };
  149.  
  150. typedef struct slip {
  151.      void   *bdev;      /* Backlink to interface, cast this to (DEV_LIST *) */
  152.      short  flags;                    /* Misc flags, meaning see below      */
  153.      struct slcompress *comp;         /* States for VJ compression          */
  154. };
  155.  
  156. /*
  157.  * Bit masks for 'flags' entry in 'struct slip'
  158.  */
  159. #define SLF_ESC        0x01      /* Next char is escaped                    */
  160. #define SLF_DROP       0x02      /* Drop this packet                        */
  161. #define SLF_LINKED     0x04      /* Interface is linked to device           */
  162. #define SLF_COMPRESS   0x08      /* Turn on VJ compression                  */
  163. #define SLF_AUTOCOMP   0x10      /* Enable comp. on TCP_UNCOMP. frame       */
  164. #define SLF_COMPCID    0x20      /* Enable CID compression                  */
  165. #define SLF_USRMASK    (SLF_COMPRESS|SLF_AUTOCOMP|SLF_COMPCID)
  166.  
  167.  
  168. /*--------------------------------------------------------------------------*/
  169.  
  170. #endif /* STIK_DRIVERS_H */
  171.